package routers

import (
	_ "github.com/EDDYCJY/go-gin-example/docs"
	"github.com/EDDYCJY/go-gin-example/middleware/cors"
	"github.com/EDDYCJY/go-gin-example/middleware/jwt"
	middleware "github.com/EDDYCJY/go-gin-example/middleware/log"
	"github.com/EDDYCJY/go-gin-example/models"
	"github.com/EDDYCJY/go-gin-example/routers/api"
	"github.com/EDDYCJY/go-gin-example/routers/openai"
	"github.com/gin-gonic/gin"
)

// InitRouter initialize routing information
func InitRouter() *gin.Engine {
	r := gin.New()
	r.Use(cors.Cors())
	r.Use(gin.Logger())
	r.Use(gin.Recovery())
	r.Use(middleware.Logger())

	// 发送短信验证码
	r.GET("/user/sendcode/phone", api.Handle_SendPhoneCode)
	// 发送邮箱验证码
	r.GET("/user/sendcode/email", api.Handle_SendEmailCode)

	// 用户注册
	r.POST("/user/register", api.Handle_Register)
	// 用户登录：用户名 + 密码
	r.GET("/user/login/pwd", api.Handle_LoginWithPwd)
	// 用户登录: 邮箱 + 验证码
	r.GET("/user/login/email", api.Handle_LoginWithEmail)
	// 用户登录：手机号 + 短信验证码
	r.GET("/user/login/phone", api.Handle_LoginWithPhone)
	// 获取用户信息
	r.GET("/user/userinfo", jwt.JWT(), api.Handle_GetUserInfo)
	// 重置密码
	r.POST("/user/passwd/reset", api.Handle_ResetPwd)

	// 获取coin价格
	r.GET("/recharge/coin/price", api.Handle_QueryCoinPrice)
	// 充值：提交订单（支付宝、paypal）
	r.POST("/user/recharge", jwt.JWT(), api.Handle_Recharge)

	// 支付宝充值异步通知
	r.POST("/recharge/alipay/notify", models.RechargeAlipayNotify)
	// 获取支付宝充值结果
	r.POST("/recharge/alipay/result", jwt.JWT(), api.Handle_RechargeAlipayResult)

	// 获取paypal支付结果
	r.POST("/recharge/paypal/capture", jwt.JWT(), models.RechargePaypalCapture)

	// 查询所有机器列表
	r.GET("/machine/list", api.Handle_QueryMachineList)
	// 查询所有的国家
	r.GET("/country/list", api.Hanle_QueryCountryList)
	// 查询所有的城市
	r.GET("/city/list", api.Hanle_QueryCityList)
	// 查询所有GPU型号
	r.GET("/gpu_name/list", api.Hanle_QueryGpuNameList)
	// 查询最大GPU数量
	r.GET("/gpu_count/max", api.Hanle_QueryGpuCountMax)

	// 实时计算按卡租用的规格
	r.POST("/machine/rent/specification", api.Handle_Specification)

	// 查询用户已出租的机器列表
	r.GET("/machine/submit/list", jwt.JWT(), api.Handle_QuerySubmitMachineList)
	// 用户提交要出租的机器
	r.POST("/machine/submit", jwt.JWT(), api.Handle_SubmitMachine)
	// 用户下线已提交的机器
	r.GET("/machine/offline", jwt.JWT(), api.Handle_offlineSubmitMachine)
	// 查询用户已租用的机器列表
	r.GET("/machine/rent/list", jwt.JWT(), api.Handle_QueryRentOrderList)
	// 用户租用机器
	r.POST("/machine/rent", jwt.JWT(), api.Handle_RentMachine)
	// 查询机器状态
	r.GET("/machine/status", api.Handle_QueryMachineStatus)

	// 查询虚拟机列表
	r.GET("/task/list", jwt.JWT(), api.Handle_TaskList)
	// 创建虚拟机
	r.POST("/task/create", jwt.JWT(), api.Handle_TaskCreate)
	// 启动虚拟机
	r.GET("/task/start", jwt.JWT(), api.Handle_TaskStart)
	// 关闭虚拟机
	r.GET("/task/shutdown", jwt.JWT(), api.Handle_TaskShutdown)
	// 强制关闭虚拟机
	r.GET("/task/poweroff", jwt.JWT(), api.Handle_TaskPoweroff)
	// 重启虚拟机
	r.GET("/task/restart", jwt.JWT(), api.Handle_TaskRestart)
	// 删除虚拟机
	r.GET("/task/delete", jwt.JWT(), api.Handle_TaskDelete)
	// 修改虚拟机密码
	r.POST("/task/passwd/set", jwt.JWT(), api.Handle_TaskPasswdSet)
	// 修改虚拟机配置
	r.POST("/task/modify", jwt.JWT(), api.Handle_TaskModify)

	// 查询虚拟机磁盘列表
	r.GET("/disk/list", jwt.JWT(), api.Handle_DiskList)
	// 数据盘扩容
	r.GET("/disk/expand", jwt.JWT(), api.Handle_DiskExpand)
	// 增加数据盘
	r.GET("/disk/add", jwt.JWT(), api.Handle_DiskAdd)
	// 删除数据盘
	r.GET("disk/delete", jwt.JWT(), api.Handle_DiskDelete)

	// 查询镜像列表
	r.GET("image/list", api.Handle_ImageList)

	//文件上传功能
	r.POST("/uploadfile", api.Handle_File_Upload)
	r.POST("/merge", api.Handle_Merge_File)
	r.GET("/files", api.Handle_Get_File_List)

	//获取价格列表，目前于获取所有的价格,当前主要用于获取爱捷云的
	r.GET("/price", api.Handle_Get_price)
	r.GET("/calculate_price", api.Handle_Calculate_Price)

	//获取剩余邀请码的数量
	r.GET("/invite_code", api.Handle_InviteCode)

	//第三方算力平台路由注册
	openai.RouterRegister(r)

	//镜像框架功能
	r.POST("/framwork/list", api.NewImageDownloadHandler().QueryList)
	//详情信息
	r.POST("/framwork/detail", api.NewImageDownloadHandler().Detail)

	r.GET("/framwork/keywords", api.NewImageDownloadHandler().Keywords)
	return r
}
